package org.example.app.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * DWS层基础实体类 - 符合实时数仓设计规范
 * 所有DWS层实体类都应该继承此基类，确保数据的一致性和规范性
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public abstract class BaseDwsBean {
    
    // 实时数仓必需的时间字段
    private Long ts;           // 事件时间戳（毫秒）
    private String stt;        // 窗口开始时间
    private String edt;        // 窗口结束时间
    private String period;     // 统计周期（1h、1d、7d等）
    
    // 数据血缘字段
    private String dataSource; // 数据来源（kafka、hbase等）
    private String processTime; // 处理时间
    private Integer version;    // 数据版本
    
    // 排名相关字段（适用于榜单类数据）
    private Integer rank;
    private String rankType;   // 排名类型：sales、growth、hot等
    
    /**
     * 设置当前时间戳
     */
    public void setCurrentTimestamp() {
        this.ts = System.currentTimeMillis();
        this.processTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }
    
    /**
     * 设置窗口时间
     * @param startTime 窗口开始时间
     * @param endTime 窗口结束时间
     */
    public void setWindowTime(String startTime, String endTime) {
        this.stt = startTime;
        this.edt = endTime;
    }
    
    /**
     * 设置数据来源信息
     * @param source 数据源
     * @param version 版本号
     */
    public void setDataLineage(String source, Integer version) {
        this.dataSource = source;
        this.version = version;
    }
    
    /**
     * 设置排名信息
     * @param rank 排名
     * @param rankType 排名类型
     */
    public void setRankInfo(Integer rank, String rankType) {
        this.rank = rank;
        this.rankType = rankType;
    }
}